

/***************************************************************************
* HEADER-FILES (Only those that are needed in this file)
****************************************************************************/
/* System-headerfiles */


/* Own headerfiles */
#include  "gear1c1.h"                          
#include  "../adapt/gear1ct.h"                               
#include  "../adapt/gear1ci.h"     
#include <windows.h>  // 包含 Windows 头文件



/***************************************************************************
* GLOBAL DEFINITIONS
*
* In this section define
* - all global ROM-constants of your module
* - all global variables of your module
****************************************************************************/
DPOOL_txGEAR_tstGearData DPOOL_txGEAR_stGearData = { False, False, 0 };
DPOOL_txGEAR_tstShiftSymbolData  DPOOL_txGEAR_stShiftSymbolData = { 0 };



void GEAR_vMain(void)
{
    GEAR_tenGearState stGearPosi;
    GEAR_tenSymbolType stShiftSymbol;


    SYN_enGetDpoolGearData(&stGearPosi); //从Dpool中获取gear档位数据：GEAR_nGearBlank、GEAR_nGearP...
    SYN_enGetDpoolShiftSymbolData(&stShiftSymbol); //从Dpool中获取档位指示的数据：GEAR_nenSymbolBlank、GEAR_nenSymbolUp、GEAR_nenSymbolDown

    uint8 shiftRecommend = ShiftRecommend_M_read(); // 获取换挡建议

    // 处理换挡提示
    switch (shiftRecommend) {
    case 0x1: // 向上换挡提示
        stShiftSymbol.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolUp;
        break;

    case 0x2: // 向下换挡提示
        stShiftSymbol.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolDown;
        break;

    default: // 其他情况
        stShiftSymbol.GEAR_u8ShiftSymbolPosi = GEAR__nenSymbolBlank;
        break;
    }

    // 从CAN信号获取当前的挡位和闪烁状态
    uint8 drvModDisp = DrvModDisp_read();
    uint8 displayGear = DisplayGear_read();
    uint8 flashingSignal = TCU__gear_flashing_read();


    // 处理正常状态下挡位显示
    if (drvModDisp == 0x0 && displayGear == 0xD) {
        if (flashingSignal == 0x0) {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearP;
        }
        else if (flashingSignal == 0x1) {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingP;
        }
        else {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
        }
    }
    // 处理D1 - D8挡位
    else if (drvModDisp == 0x3 && flashingSignal == 0x0) {
        switch (displayGear) {
        case 0x1:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD1;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD1;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        case 0x2:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD2;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD2;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;

        case 0x3:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD3;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD3;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        case 0x4:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD4;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD4;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        case 0x5:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD5;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD5;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        case 0x6:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD6;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD6;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        case 0x7:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD7;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD7;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        case 0x8:
            if (flashingSignal == 0x0) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearD8;
            }
            else if (flashingSignal == 0x1) {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingD8;
            }
            else {
                stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
            }
            break;
        }
    }
    // 处理N挡位
    else if (drvModDisp == 0x2 && displayGear == 0x0) {
        if (flashingSignal == 0x0) {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearN;
        }
        else if (flashingSignal == 0x1) {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingN;
        }
        else {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
        }
    }
    // 处理R挡位
    else if (drvModDisp == 0x1 && displayGear == 0xB) {
        if (flashingSignal == 0x0) {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearR;
        }
        else if (flashingSignal == 0x1) {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearFlashingR;
        }
        else {
            stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
        }
    }
    // 处理手动模式M1 - M8
    else if (drvModDisp == 0x4) {
        switch (displayGear) {
        case 0x1:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear1;
            break;
        case 0x2:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear2;
            break;
        case 0x3:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear3;
            break;
        case 0x4:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear4;
            break;
        case 0x5:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear5;
            break;
        case 0x6:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear6;
            break;
        case 0x7:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear7;
            break;
        case 0x8:
            stGearPosi.GEAR_u8GearPosi = GEAR_nGear8;
            break;
        }
    }
    // 处理其他情况
    else {
        // 当DrvModDisp为其他值，或者DisplayGear为其他值时，显示空白
        stGearPosi.GEAR_u8GearPosi = GEAR_nGearBlank;
    }




    /**/

        /*SYN_enSetDpoolGearData(&stGearPosi);
        SYN_enSetDpoolShiftSymbolData(&stShiftSymbol);*/
}

void GEAR_vInit(void)
{
    printf("Gear Init\n");
}



/***************************************************************************
* EOF: GEAR1C1.C
****************************************************************************/
